package com.cloud.point.jvm;

/**
 * TestFinally
 *
 * @author 24373
 * @version 1.0
 * @date 2024-06-10 15:27
 */
public class TestFinally {

    public static void main(String[] args) {

        System.out.println(test1());
        System.out.println(test2());
        System.out.println(test3());

    }

    /**
     * finally 块会存在所有可能的流程中，返回的结果值以 finally 为准
     * 分别放入 try 流程，catch 流程以及 catch 剩余的异常类型流程
     */
    public static int test1() {
        int i = 0;
        try {
            i++;
            return i;
        } finally {
            i--;
            return i;
        }
    }

    /**
     * try块中的 return 值会暂时先存放在单独槽位中，finally语句的执行不会影响这个返回值
     */
    public static int test2() {
        int i = 0;
        try {
            i++;
            return i;
        } finally {
            i--;
        }
    }

    /**
     * 如果 finally 块中出现 return ，会吞掉异常，返回 finally 块中的值
     */
    public static int test3() {
        int i = 0;
        try {
            int j = 1 / 0;
            i++;
            return i;
        } finally {
            i--;
            return i;
        }
    }

}
